将matlab数据输出到Excel:writetable函数的使用总结

您所在的位置:网站首页 matlab 打印列表 将matlab数据输出到Excel:writetable函数的使用总结

将matlab数据输出到Excel:writetable函数的使用总结

2022-05-13 23:58| 来源: 网络整理| 查看: 265

前言

我最近在做matlab的潮流上机计算,要求每次迭代的结果导出到一个输出文件中。我参考的代码是用的.txt的文本。但为了体现我自己的创新能力,同时降低与室友的程序相似度,我采用Excel表格作为程序迭代结果的输出文件格式。

我一开始是打算使用xlswrite函数(没记错的话是叫这个名字)来把数据输出到Excel中。但是了在matlab的help文档中,我发现matlab官方已经不建议使用xlswrite函数,而是推荐使用writetable等函数。所以我就使用了writetable函数实现数据输出到Excel表格的过程。因为这是我第一次使用writetable函数,在使用的时候出了点问题,所以我觉得有必要进行总结,以便为下次使用提供参考。

writetable介绍writetable(T) writetable(T,filename) writetable(___,Name,Value)

writetable(T)将表T写入逗号分隔的文本文件。T中每个变量的每一列都将成为输出文件中的列。T的变量名称将成为文件第一行的列标题。

writetable(T,filename)函数 将表 T 写入filename指定的名称和扩展名的文件中。拓展名包括:.txt、.dat、.csv、.xls、xlsx等。

T使用table类型的表格,可以通过table类型将输入变量变成table类型,常用语法如下:

T = table(var1,...,varN)

table()的输入变量,指定为具有相同行数的数组,同时其可以具有不同的大小和数据类型,例如可以是数值数组、逻辑数组、字符数组等。

writetable的使用将矩阵输出到excela = zeros(5); b = table(a); writetable(b,'yyy.xlsx','WriteVariableNames',false,'Sheet','Sheet1','Range','A1');

在这个程序中,我创建了一个5阶零矩阵,将它变成table类型后输出到yyy.xlsx的Sheet1页的A1起始位置上。下图1为输出结果。代码中WriteVariableNames为是否将变量名称写入excel作为列标题,true为允许,false为不允许。Sheet为要写入excel的工作表,Range为要写入的工作表的矩形部分。

图1 矩阵输出到excel中

2.将字符串数组输出到excel中

str3 = {'节点','节点电压','节点相角(角度)','节点注入有功功率','节点注入无功功率'}; table3 = table(str3); writetable(table3,'yyy.xlsx','WriteVariableNames',false,'Sheet','Sheet1','Range','A1');

先将字符向量元胞数组转换为字符串数组。然后转换成table类型输出。输出excel如下图2

图二 字符串输出到excel中

3.每次迭代输出

out_add = 'out_data.xlsx'; % 输出文件名 for T = 1: 10 ran = 13+ row_bus+ row_line; %每迭代一次要占的行 % 开始输出 str1 = {'迭代计算次数:',string(T),'U最大误差:',string(max(abs(dU))),'角度最大误差:',string(max(abs(dAng)))}; table1 = table(str1); %把很多字符串给搞成table类型 range1 = 'A'+string(ran*(T-1)+1); %写在excel上的左上角的位置,格式为:A+'X' writetable(table1,out_add,'WriteVariableNames',false,'Sheet','Sheet1','Range',range1); %将table写入地址为out_add的excle表中,若文件不存在,则会新建一个out_add文件 str2 = {'节点计算结果:'}; table2 = table(str2); range2 = 'A'+string(ran*(T-1)+3); writetable(table2,out_add,'WriteVariableNames',false,'Sheet','Sheet1','Range',range2); str3 = {'节点','节点电压','节点相角(角度)','节点注入有功功率','节点注入无功功率'}; table3 = table(str3); range3 = 'A'+string(ran*(T-1)+4); writetable(table3,out_add,'WriteVariableNames',false,'Sheet','Sheet1','Range',range3); table4 = table(mbus_result); range4 = 'A'+string(ran*(T-1)+5); writetable(table4,out_add,'WriteVariableNames',false,'Sheet','Sheet1','Range',range4); str5 = {'线路计算结果:'}; table5 = table(str5); range5 = 'A'+string(ran*(T-1)+row_bus+6); writetable(table5,out_add,'WriteVariableNames',false,'Sheet','Sheet1','Range',range5); str6 = {'节点i','节点j','线路有功功率Sij','线路无功功率Sij','线路有功功率Sji','线路无功功率Sji','线路有功损耗','线路无功损耗'}; table6 = table(str6); range6 = 'A'+string(ran*(T-1)+row_bus+7); writetable(table6,out_add,'WriteVariableNames',false,'Sheet','Sheet1','Range',range6); table7 = table(mline_result); range7 = 'A'+string(ran*(T-1)+row_bus+8); writetable(table7,out_add,'WriteVariableNames',false,'Sheet','Sheet1','Range',range7); table8 = table({'**********','**********','**********','**********','**********','**********','**********','**********'}); range8 = 'A'+string(ran*(T-1)+row_bus+row_line+9); writetable(table8,out_add,'WriteVariableNames',false,'Sheet','Sheet1','Range',range8); end

这是潮流计算程序中的截取,其中mbus_result、mline_result是迭代输出的结果。mbus_result是一个5*5的矩阵,mline_result是一个5*8的矩阵,row_bus、row_line是mbus_result、mline_result的行数。输出结果如下图3 。

图3 一次迭代的输出结果



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3